#ifndef SWITCHBUTTON_H
#define SWITCHBUTTON_H

#include <QWidget>
#include <QtUiPlugin/QDesignerExportWidget>
#include <QPropertyAnimation>
#include <QPainter>
#include <QResizeEvent>
#include <QPaintEvent>
#include <QStyleOptionViewItem>


#if defined(DLL_LMCPADDLETHREAD_LIBRARY)
#  define					DLL_LMCPADDLETHREAD_EXPORT			Q_DECL_EXPORT
#else
#  define					DLL_LMCPADDLETHREAD_EXPORT
#endif



class QDESIGNER_WIDGET_EXPORT SwitchButton : public QWidget
{
    Q_OBJECT
    Q_PROPERTY(QRect m_SwitchRect READ getSwitchRect WRITE setSwitchRect NOTIFY posMoved)

public:
    SwitchButton(QWidget *parent = 0);
    void init();                                                        // 初始化
    void setOnStateBackgroundColor(QColor color);                       // 设置On状态时按钮背景颜色
    void setOffStateBackgroundColor(QColor color);                      // 设置Off状态按钮背景颜色
    void setStateLabelColor(QColor color);                              // 设置状态文字标签颜色
    void setSwitchColor(QColor color);                                  // 设置圆形开关颜色
    QRect getSwitchRect();                                              // 获取圆形开关外切矩形
    void setSwitchRect(QRect rect);                                     // 设置圆形开关外切矩形
    void setSwitchMovingDuration(quint16 msecs);                        // 设置开关动作时长
    void setStateLabelLineWidth(quint8 width);                          // 设置状态文字标签线宽
    void setOnStateRectBorderWidth(quint8 width);                       // 设置On状态时圆形开关的外切矩形距离边界的距离
    bool getSwtichState();                                              // 获取开关状态
    void setSwitchState(bool state);                                    // 设置开关状态
    QSize sizeHint() const override;

signals:
    void posMoved();                                                    // 圆形开关外切矩形变更信号
    void switchOn();                                                    // 开关打开信号
    void switchOff();                                                   // 开关关闭信号
    void stateChanged();                                                // 状态修改信号

protected:
    void paintEvent(QPaintEvent* event) override;
    void resizeEvent(QResizeEvent *event) override;
    void drawBackground(QPainter* const painter);                       // 绘制按钮背景轮廓
    void drawSwitch(QPainter* const painter);                           // 绘制按钮开关
    void drawStateLabel(QPainter* const painter);                       // 绘制按钮中的状态文字标识，I/O
    void mousePressEvent(QMouseEvent *event) override;                           // 鼠标点击

private:
    QColor m_OnStateBackgroundColor;                                    // 开关按钮ON状态时的背景色
    QColor m_OffStateBackgroundColor;                                   // 开关按钮OFF状态时的背景色
    QColor m_StateLabelColor;                                           // 状态文字标签颜色
    QRect m_SwitchRect;                                                 // 开关圆形按钮的外切矩形
    QColor m_SwitchColor;                                               // 开关圆形按钮的背景色
    bool m_State;                                                       // 开关状态
    quint16 m_Interval;                                                 // 开关动作时长
    quint16 m_StateLabelLength;                                         // 状态文字标签正方形的边长
    quint8 m_StateLabelLineWidth;                                       // 状态文字标签线宽
    quint8 m_OnStateRectBorderWidth;                                    // On状态时圆形开关的外切矩形距离边界的距离
};

#endif // SWITCHBUTTON_H
